/*
功能：定义一个操作数据的库，支持mysql mogodb sql
要求1：mysql sql mogodb 都有add update delete get 方法
注意：约束统一的规范，以及代码重用
解决方案:需要约束规范所以要定义接口，需要代码重用  所以要用到泛型
1.接口：在面向对象的编程中，接口是一种规范的定义，它定义了行为和动作的规范
2.泛型 通俗理解：泛型就是解决 类 接口 方法的复用
*/ 

interface DBI<T>{
 add(info:T):boolean
 update(info:T,id:number):boolean
 delete(id:number):boolean
 get(id:number):boolean
}

// 定义一个操作mysql的类
class MysqlDb<T> implements DBI<T>{
  add(info: T): boolean {
    console.log(info,'新增');
    return true
  }
  update(info: T, id: number): boolean {
    console.log(info,'编辑');
    return true
  }
  delete(id: number): boolean {
    console.log(id,'删除');
    return true
  }
  get(id: number): boolean {
    console.log(id,'获取');
    return true
  }

}

// 往mysql里新增数据
class User{
  username:string|undefined
  password:string|undefined
  id:number|undefined
}
let u = new User()
u.username= '小花'
u.password ='123456'
let oMysql = new MysqlDb<User>()  //类作为参数约束数据传入的类型
oMysql.add(u)




// 定义一个操作sql的类
class sqlDb<T> implements DBI<T>{
  add(info: T): boolean {
    throw new Error("Method not implemented.")
  }
  update(info: T, id: number): boolean {
    throw new Error("Method not implemented.")
  }
  delete(id: number): boolean {
    throw new Error("Method not implemented.")
  }
  get(id: number): boolean {
    throw new Error("Method not implemented.")
  }
  
}

// 定义一个mogodb 的类
class mogoDb<T> implements DBI<T>{
  add(info: T): boolean {
    throw new Error("Method not implemented.")
  }
  update(info: T, id: number): boolean {
    throw new Error("Method not implemented.")
  }
  delete(id: number): boolean {
    throw new Error("Method not implemented.")
  }
  get(id: number): boolean {
    throw new Error("Method not implemented.")
  }
  
}